package com.imooc.project.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.imooc.project.entity.Customer;
import com.imooc.project.service.CustomerService;
import com.imooc.project.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 客户表 前端控制器
 * </p>
 *
 * @author HMF
 * @since 2021-09-10
 */
@Controller
@RequestMapping("/customer")
public class CustomerController {

    @Autowired
    private CustomerService customerService;  // 注入 service

    /**
     * 进入客户管理列表页，
     * <p>
     * 使用到了 SpringMVC 的原理
     *
     * @return
     */
    @GetMapping("/toList")
    public String toList() {
        return "customer/customerList";
    }

    /**
     * 查询列表数据
     *
     * @param realName
     * @param phone
     * @param page     不能为空
     * @param limit    不能为空
     * @return
     */
    @GetMapping("/list")
    @ResponseBody  // 需要响应返回 json 数据，所以这里需要加上该注解，不然就是返回字符串了
    public R<Map<String, Object>> list(String realName, String phone, Long page, Long limit) {
        // 使用Lambda条件构造器模糊查询的写法，这里就相当于 sql 语句，只不多他是通过方法的方式设置
        LambdaQueryWrapper<Customer> wrapper = Wrappers.<Customer>lambdaQuery()
                .like(StringUtils.isNotBlank(realName), Customer::getRealName, realName)
                .like(StringUtils.isNotBlank(phone), Customer::getPhone, phone)
                .orderByDesc(Customer::getCustomerId);

        Page<Customer> myPage = customerService.page(new Page<>(page, limit), wrapper);

//        HashMap<String, Object> data = new HashMap<>();  // 生成一个map，用来存放返回的数据
//
//        data.put("count", myPage.getTotal());
//        data.put("records", myPage.getRecords());
//
//        return R.ok(data); // 返回数据

        // 上面的注释代码使用下面的这一句代码封装了
        return ResultUtil.buildPageR(myPage);
    }

    /**
     * 进入新增页
     *
     * @return
     */
    @GetMapping("/toAdd")
    public String toAdd() {
        return "customer/customerAdd";  // 这里跳转到页面的路径不要写错了
    }

    /**
     * 新增客户
     *
     * @param customer
     * @return
     */
    @PostMapping
    @ResponseBody   // 因为返回的是json数据，所以这里需要加上该注解
    public R<Object> add(@RequestBody Customer customer) {
//        boolean success = customerService.save(customer);
//        if (success) {
//            return R.ok(null);
//        }
//
//        return R.failed("操作失败！");

        // 上面注释的代码经过封装，直接改为下面的代码
        return ResultUtil.buildR(customerService.save(customer));
    }
}
